[Boto3 Adv-Cal DAY6]IAMを利用して、作成したユーザのAccessKeyIdとSecretAccessKeyを取得してみる
boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。
boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。
6日目はIAMを使ってユーザの作成及びAccessKeyId等の情報生成をしてみました。
目次
boto3を通してIAMで出来ること
ドキュメントは下記リンク先です。
ざっくりと以下のことができます。
- ユーザの操作(作成・削除)
- アクセスキーの操作(作成・削除)
- ロールの操作(作成・削除・付与)
他にも多数の操作が出来ますが、一覧化がし難いため興味のある方は上記リンクから辿ってみてください。
今回の操作
指定した名前でユーザを作成し、 AccessKeyIdとSecretAccessKeyを合わせて取得してみます。
- ユーザの作成
- AccessKeyIdとSecretAccessKeyの取得
% python main.py --user_name test Input Profile name [default]>> advent_calendar test: AccessKey:XXXXXXXXXXXXXXXXXXXX SecretAccessKey:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
main.py
import boto3 import os import re import argparse class IAMAccessStatusWizard: _client_name = 'iam' _session = None def __init__(self, profile_name): elf._session = boto3.Session(profile_name=profile_name) @property def session(self): return self._session def get_client(self, client_name=None): if not client_name: client_name = self._client_name return self.session.client(client_name) @property def client_name(self): return self._client_name def create_user(self, user_name): params = { 'UserName': user_name, } return self.get_client().create_user(**params) def create_access_status(self, user_name): params = { 'UserName': user_name } return self.get_client().create_access_key(**params) @classmethod def prompt_user_name(cls): user_name = None while True: user_name = input('\nInput user name >>') if user_name and len(user_name) != 0: break return user_name @staticmethod def prompt(user_name): default_profile_name = 'default' profile_name = input('Input Profile name [{}]>> '.format(default_profile_name)) if len(profile_name) == 0: profile_name = default_profile_name wizard = IAMAccessStatusWizard(profile_name) if (not user_name) or len(user_name) == 0: user_name = wizard.prompt_user_name() user = wizard.create_user(user_name) access_status = wizard.create_access_status(user['User']['UserName']) print_template = '{UserName}:\n AccessKey:{AccessKeyId}\n SecretAccessKey:{SecretAccessKey}' print_params = access_status['AccessKey'] print(print_template.format(**print_params)) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--user_name') args = parser.parse_args() IAMAccessStatusWizard.prompt(args.user_name)
UserNameとAccessKeyId
各種発行及び更新操作で必要になることが多いパラメータでした。
MFA
二段階認証に関して、以下の操作を行うための呼び出し手段があります。
- MFAデバイスの有効化
- MFAデバイスの同期
いずれもTeminalでの実行で完結させる場合は、1Password CLI等が別途必要になります。
まとめ
開発用のユーザ及びAccessKeyIDをまとめて発行する場合には有効な手段になると思われます。
IAMの操作で出力される情報には秘匿性を高く求められるものもあるため、取扱には十分注意しましょう。